package pkg

import (
	"context"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
	"github.com/google/uuid"
	"log"
	"strings"
)

/*
Go SDK V2 客户端初始化配置说明：

1. 签名版本：Go SDK V2 默认使用 V4 签名，提供更高的安全性
2. Region配置：初始化 Client 时，您需要指定阿里云通用 Region ID 作为发起请求地域的标识
   本示例代码使用华东1（杭州）Region ID：cn-hangzhou
   如需查询其它 Region ID 请参见：OSS地域和访问域名
3. Endpoint配置：
   - 可以通过 Endpoint 参数，自定义服务请求的访问域名
   - 当不指定时，SDK 默认根据 Region 信息，构造公网访问域名
   - 例如当 Region 为 'cn-hangzhou' 时，构造出来的访问域名为：'https://oss-cn-hangzhou.aliyuncs.com'
4. 协议配置：
   - SDK 构造访问域名时默认采用 HTTPS 协议
   - 如需采用 HTTP 协议，请在指定域名时指定为 HTTP，例如：'http://oss-cn-hangzhou.aliyuncs.com'
*/

func Upload(file string) string {
	// 方式一：只填写Region（推荐）
	//cfg := oss.LoadDefaultConfig().
	//	WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
	//	WithRegion("cn-shanghai") // 填写Bucket所在地域，以华东1（杭州）为例，Region填写为cn-hangzhou，SDK会根据Region自动构造HTTPS访问域名

	// 方式二：同时填写Region和Endpoint
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("cn-shanghai"). // 填写Bucket所在地域，以华东1（杭州）为例，Region填写为cn-hangzhou
		WithEndpoint("https://oss-cn-shanghai.aliyuncs.com") // 填写Bucket所在地域对应的公网Endpoint。以华东1（杭州）为例，Endpoint填写为'https://oss-cn-hangzhou.aliyuncs.com'

	// 创建OSS客户端
	client := oss.NewClient(cfg)

	// 定义要上传的字符串内容
	body := strings.NewReader(file)

	new_name := uuid.NewString() + ".png"

	// 创建上传对象的请求
	request := &oss.PutObjectRequest{
		Bucket: oss.Ptr("lz4069"), // 存储空间名称
		Key:    oss.Ptr(new_name), // 对象名称
		Body:   body,              // 要上传的字符串内容
	}

	// 发送上传对象的请求
	result, err := client.PutObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to put object %v", err)
	}

	// 打印上传对象的结果
	log.Printf("Status: %#v\n", result.Status)
	log.Printf("RequestId: %#v\n", result.ResultCommon.Headers.Get("X-Oss-Request-Id"))
	log.Printf("ETag: %#v\n", *result.ETag)

	//路径返回
	url_file := "https://lz4069.oss-cn-shanghai.aliyuncs.com/" + new_name

	return url_file
}
